package com.heu.blood.storge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heu.blood.common.utils.PageUtils;
import com.heu.blood.match.entity.BloodInformationEntity;
import com.heu.blood.storge.entity.BloodInStorgeEntity;
import com.heu.blood.storge.entity.BloodVerifyStorgeEntity;
import com.heu.blood.storge.vo.BloodContactVerifyAndInStorgeVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 *
 *
 * @author lyj
 * @email lyj@heu.com
 * @date 2023-06-16 00:33:53
 */
public interface BloodVerifyStorgeService extends IService<BloodVerifyStorgeEntity> {

    PageUtils queryPage(Map<String, Object> params);

    BloodVerifyStorgeEntity bloodCheck(BloodInformationEntity bloodInformation);

    //根据excel后获取解析后的List集合
    List<Map> getListByExcel(InputStream is, String fileName);

    //将excel解析为血液检验实体
    BloodVerifyStorgeEntity convertToVerifyStorge(Map bloodInformationMap);

    //根据解析获取的list增加到数据库检验表中
    Boolean BatchImportBloodVerifyStorge(List<Map> bloodInformationList);

    //将bloodinformationlist转变为bloodverifyStorgeList对象
    List<BloodVerifyStorgeEntity> convertFromBloodinformationlistToBloodVerifyStorge(List<BloodInformationEntity> bloodInformationEntityList);


    // 从excel表批量导入血液信息数据
    void importExcelToBloodVerify(MultipartFile multipartFile);

    //批量血液验证接口
    //首先读出数据库中血液检验表的数据 且血液未核验的数据
    List<BloodVerifyStorgeEntity> listForBloodVerifyStorage();

    //与血液信息表中的数据进行批量核对检验
    void bloodBatchCheck(List<BloodVerifyStorgeEntity> bloodVerifyStorgeEntityList);

    //与血液信息表中的数据单条核验
    void bloodSimpleCheck(BloodVerifyStorgeEntity bloodVerifyStorgeEntity);

    //将检验完不合格的血液的相关操作抽象成一个方法 包括血液信息表的删除 血液入库表状态更新 退血表增加数据 以及当前血液检验表结果的检验结果的更改
    void bloodAbstractFourMethodforUnsuccessful(BloodInformationEntity bloodInformationEntity, String verifyResult);


    /**
     * 传递blood_id和失败原因 更新血液验证表的原因
     * @param bloodId
     * @param verifyUnsuccessReason
     */
    void UpdateVerifyResultByBloodIdAndVerifyUnsuccessReason(String bloodId, String verifyUnsuccessReason);

    /**
     * 根据id联表查询库存表和验证表
     *
     */
    PageUtils bloodContactVerifyAndInStorgeByBloodId(Map<String, Object> params);
    /**
     * 根据血液Id数组 批量更新验证表验证状态
     */
    void batchUpdateVerifyResultForVerifyStorgeByBloodId(String[] bloodids);

    int batchSave(List<BloodVerifyStorgeEntity> bloodVerifyStorgeEntityList);

    BloodContactVerifyAndInStorgeVo getVerifyCompareRes(BloodVerifyStorgeEntity bloodVerifyStorgeEntity);

    int saveWithCheck(BloodVerifyStorgeEntity bloodVerifyStorge);

    BloodInStorgeEntity checkInStorageTestStatus(String bloodId);
}

